package com.lab.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.validation.constraints.FutureOrPresent;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

/**
 * 请假申请DTO（数据传输对象）
 * 用于成员提交请假申请时传递核心信息，对应leave_request表的创建操作
 */
@Data
public class LeaveRequestDTO {

    /**
     * 成员ID（关联member表主键）
     * 必须指定有效的实验室成员ID，否则无法关联申请人
     */
    @NotNull(message = "申请人ID不能为空")
    private Integer memberId;

    /**
     * 请假理由
     * 不可为空，需详细说明请假原因（业务上可根据需求增加长度限制）
     */
    @NotBlank(message = "请假理由不能为空")
    private String reason;

    /**
     * 请假开始时间
     * 必须为当前时间或未来时间，不允许申请过去的请假
     */
    @NotNull(message = "请假开始时间不能为空")
    @FutureOrPresent(message = "请假开始时间不能是过去的时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // 可根据实际时区调整
    private LocalDateTime startTime;


    /**
     * 请假结束时间
     * 必须晚于开始时间，且为当前时间或未来时间
     */
    @NotNull(message = "请假结束时间不能为空")
    @FutureOrPresent(message = "请假结束时间不能是过去的时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;
}